package cn.kgc.spring.day04.service.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * @author 课工场
 * @date 2024/11/7
 * @description  通过类   将跟时间相关的所有的通知 定义在该类中
 */
public class TimeAspect {


    // 前置通知
    public void  beforeAdvice(){
        System.out.println("上课时间到了,请开始上课...");
    }


    // 后置通知   目标方法正确执行后
    public void  afterRetuningAdvice(){
        System.out.println("下课时间到了,请准时下课...");
    }


    // 最终通知   不管目标方法是都抛出异常都要执行的通知
    public void  afterAdvice(){
        System.out.println("-----最终通知----");
    }


    // 异常通知  目标方法在执行的过程中出现异常
    public void  afterThrowingAdvice(){
        System.out.println("-----异常通知----");
    }


    // 环绕通知
    public Object  aroundAdvice(ProceedingJoinPoint joinPoint){

        // 目标方法的执行
        Object proceed = null;
        try {
            System.out.println("上课时间到了");
            proceed = joinPoint.proceed();
            System.out.println("下课时间到了");
        } catch (Throwable e) {
            System.out.println("出现异常了,异常通知");
        }finally {
            System.out.println("---最终通知-----");
        }

        return  proceed;
    }

}
